﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using CLab.Support.Base;
using CLab.Support.SoporteService;
using GandA.Component.Log;

namespace CLab.Support.Forms
{
    public partial class FrmSupport : Form
    {
        private bool banMostrar = false;
        private int idSoporte;
        private int idLaboratorio;
        private int idSucursal;
        public FrmSupport()
        {
            InitializeComponent();
        }

        #region Eventos
        private void FrmSupport_Load(object sender, EventArgs e)
        {
            NI.Visible = false;
            pnlMensaje.Dock = DockStyle.Fill;
            try
            {
                ObtenListaSoporte();
                timer.Enabled = true;
            }
            catch (Exception ex)
            {
                Log.WriteLog(ex, ex.Message);
                MessageBox.Show("Error en la aplicación");
            }
        }

        private void NI_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            //Hacemos visible el formulario
            this.Show();
            this.WindowState = FormWindowState.Normal;
            //Ocultamos el icono de la bandeja de sistema
            NI.Visible = false;
        }

        private void FrmSupport_Resize(object sender, EventArgs e)
        {
            //Si el estado actual de la ventana es "minimizado"...
            if (this.WindowState == FormWindowState.Minimized)
            {
                //Ocultamos el formulario
                this.Visible = false;
                //Hacemos visible el icono de la bandeja del sistema
                NI.Visible = true;
                //NI.BalloonTipTitle = "Support";
                //NI.BalloonTipText = "Aquí estare...";
                //NI.ShowBalloonTip(3000);
            }
        }

        private void Soporte_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            switch (e.ClickedItem.Name)
            {
                case "Salir":
                    this.Close();
                    break;
                case "Max":
                    NI_MouseDoubleClick(null, null);
                    break;
            }
        }

        private void NI_BalloonTipClicked(object sender, EventArgs e)
        {
            if (banMostrar)
            {
                NI.Visible = false;
                this.Show();
                this.WindowState = FormWindowState.Normal;
                banMostrar = false;   
            }
        }

        private void gridSoporte_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            idSoporte = Convert.ToInt32(gridSoporte.Rows[e.RowIndex].Cells["IdSoporte"].Value);
            idLaboratorio = Convert.ToInt32(gridSoporte.Rows[e.RowIndex].Cells["IdLaboratorio"].Value);
            idSucursal = Convert.ToInt32(gridSoporte.Rows[e.RowIndex].Cells["IdSucursal"].Value);
            SoporteService.wsSoporteSoapClient srv = new wsSoporteSoapClient();
            ArrayOfString res = srv.GuardaSoporte(idLaboratorio, idSucursal, 2, "En Proceso", idSoporte);
            if (res[1] == "1")
            {
                txtLstMsg.Clear();
                txtMsg.Clear();
                timerMsg.Enabled = true;
                gridSoporte.Visible = false;
                pnlMensaje.Visible = true;
            }
            else
            {
                MessageBox.Show("soporte ya no disponible", "CLab");
            }
        }

        private void btnFinalizar_Click(object sender, EventArgs e)
        {
            SoporteService.wsSoporteSoapClient srv = new wsSoporteSoapClient();
            srv.GuardaSoporte(idLaboratorio, idSucursal, 3, "Terminado", idSoporte);
            gridSoporte.Visible = true;
            pnlMensaje.Visible = false;
            timerMsg.Enabled = false;
            txtLstMsg.Clear();
            txtMsg.Clear();
            ObtenListaSoporte();
        }

        private void timer_Tick(object sender, EventArgs e)
        {
            ObtenSoporteAut();
        }

        private void btnEnviar_Click(object sender, EventArgs e)
        {
            try
            {
                SoporteService.wsSoporteSoapClient srv = new wsSoporteSoapClient();
                srv.GuardaMensaje(idSoporte, txtMsg.Text.Trim(), "Soporte");
                txtMsg.Clear();
                txtMsg.Focus();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error en la aplicación", "CLab");
            }
        }

        private void timerMsg_Tick(object sender, EventArgs e)
        {
            SoporteService.wsSoporteSoapClient srv = new wsSoporteSoapClient();
            DataSet ds = srv.ObtenMensajes(idSoporte);
            txtLstMsg.Text = string.Empty;
            foreach (DataRow row in ds.Tables[0].Rows)
            {
                txtLstMsg.Text = txtLstMsg.Text + row["Mensaje"].ToString() + "\r\n";
            }

            //move the caret to the end of the text
            txtLstMsg.SelectionStart = txtLstMsg.TextLength;
            //scroll to the caret
            txtLstMsg.ScrollToCaret();
        }
        #endregion

        #region Metodos
        private void ObtenSoporteAut()
        {
            ObtenListaSoporte();
        }

        private void ObtenListaSoporte()
        {
            try
            {
                ////ArrayList parametros = new ArrayList();
                ConsultaService.ConsultaServiceClient servicio = new ConsultaService.ConsultaServiceClient();
                ////Parametros
                //parametros.Add(CreaParametroConsulta("@psNombre", txtNombre.Text, ConsultaServiceReference.Parameter.vEnumType.VarChar));
                //parametros.Add(CreaParametroConsulta("@pnIdDoctor", null, ConsultaServiceReference.Parameter.vEnumType.Int));
                //parametros.Add(CreaParametroConsulta("@pnIdLaboratorio", SessionLaboratorio.IdLaboratorio, ConsultaServiceReference.Parameter.vEnumType.Int));
                //ConsultaService.Parameter[] prms = new ConsultaService.Parameter[parametros.Count];
                //parametros.CopyTo(prms);
                //Ejecuta conulta
                DataSet ds = servicio.EjecutaConsultaSinParametros("spObtenListaSoporte");
                gridSoporte.DataSource = ds.Tables[0];

                if (!ds.Tables[1].Rows[0]["NuevoSoporte"].ToString().Equals("0"))
                {
                    NI.Visible = true;
                    NI.BalloonTipTitle = "Support";
                    NI.BalloonTipText = "CLab requiere su atención";
                    NI.ShowBalloonTip(3000);
                    banMostrar = true;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error en la aplicación", "CLab");
            }
        }
        #endregion

        private void txtMsg_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == 13)
            {
                btnEnviar_Click(null, null);
            }
        }
    }
}
